Baza e te dhenave
Ne kapitullin 7, ne seksionin e trete me titull "Ndertimi i nje baze te dhenash reale" paraqitem ndertimin e nje baze te dhenash reale. Qellimisht, shembulli qe trajtuam atje perben bazen e te dhenave qe na nevojitet per projektin e ketij kapitulli.
Per kthjelltesi rikujtojme qe databaza jone do te kete 4 tabela:
departamentet
- Do te mbaje listen e departamenteve te fakultetit, dhe do te perbehet nga fushat e meposhtme:id
- Do te jete celes primar sepse eshte identifikues unik.
- Nuk do te pranoje vlera
NULL
sepse duhet te jete gjithnje numer, i tipitint
- Do te jete
AUTO_INCREMENT
ne menyre qe kur te shtojme departament te ri, id-ja te gjenerohet automatikisht
emri
- Do te mbaje emrin e departamentit
- Do te jete i tipit varchar qe pranon maksimumi 100 karaktere
- Nuk duhet te pranoje vleren
NULL
sepse nuk ka sens nje departament me nje emer te tille
pershkrimi
- Do te mbaje nje pershkrim te departamentit nese eshte i nevojshem, perndryshe
NULL
- Do te jete i tipit
text
- Do te mbaje nje pershkrim te departamentit nese eshte i nevojshem, perndryshe
perdoruesit
- Do te mbaje listen e departamenteve te fakultetit, dhe do te perbehet nga fushat e meposhtme:id
- Do te jete celes primar sepse eshte identifikues unik.
- Nuk do te pranoje vlera
NULL
sepse duhet te jete gjithnje numer, i tipitint
- Do te jete
AUTO_INCREMENT
ne menyre qe kur te shtojme perdorues te ri, id-ja te gjenerohet automatikisht
emri
- Do te mbaje emrin e perdoruesit
- Do te jete i tipit
varchar
qe pranon maksimumi 80 karaktere - Nuk duhet te pranoje vleren
NULL
sepse nuk ka sens nje perdorues pa emer
email
- Do te mbaje e-mailin e perdoruesit me ane te te cilit mund te logohet ne faqe
- Do te jete i tipit
varchar
me maksimumi 50 karaktere. - Nuk duhet te pranoje vleren
NULL
sepse perdoruesi duhet te kete patjeter nje email
password
- Do te mbaje fjalekalimin e perdoruesit me ane te te cilit do te logohet ne faqe
- Do te jete i tipit
varchar
me maksimumi 100 karaktere. - Nuk duhet te pranoje vleren
NULL
sepse perdoruesi duhet te kete patjeter nje fjalekalim
tipi
- Do te jete i nje lloj tipi te vecante te quajtur
SET('0', '1')
i cili mban vleren0
ose vleren1
- Vlera
0
tregon qe perdoruesi eshte administrator, ndersa vlera1
tregon qe perdoruesi eshte pedagog - Vlera
default
do te jete1
- Do te jete i nje lloj tipi te vecante te quajtur
id_departament
- Do te jete
FOREIGN KEY
qe referencon fushenid
te tabelesdepartamentet
- Do te jete i tipit
int
pasi referencon nje fushe te ketij tipi - Mund te mbaje edhe vleren
NULL
sepse perdoruesit e tipit0
(administrator) nuk duhet te jene te lidhur me departamentin, ndersa pedagoget po.
- Do te jete
artikujt
- Do te mbaje listen e lajmeveid
- Do te jete celes primar sepse eshte identifikues unik.
- Nuk do te pranoje vlera
NULL
sepse duhet te jete gjithnje numer, i tipitint
- Do te jete
AUTO_INCREMENT
ne menyre qe kur te shtojme artikull te ri, id-ja te gjenerohet automatikisht
titulli
- Do te mbaje titullin e artikullit
- Do te jete i tipit
varchar
qe pranon maksimumi 255 karaktere - Nuk duhet te pranoje vleren
NULL
sepse nuk ka sens nje artikull pa titull
pershkrimi
- Do te mbaje permbajtjen e artikullit
- Do te jete i tipit
text
- Nuk duhet te pranoje vleren
NULL
sepse nuk ka sens nje artikull pa permbajtje
data
- Do te mbaje daten e krijimit te artikullit
- Do te jete i tipit
date
- Nuk duhet te pranoje vleren
NULL
sepse cdo artikull duhet te kete nje date krijimi
id_departament
- Do te jete
FOREIGN KEY
qe referencon fushenid
te tabelesdepartamentet
- Do te jete i tipit
int
pasi referencon nje fushe te ketij tipi - Nuk duhet te pranoje vleren
NULL
sepse artikujt do te kategorizohen sipas departamenteve, ndaj na sherben qe cdo artikull te jete i lidhur me nje departament
- Do te jete
njoftimet
- Do te mbaje listen e njoftimeveid
- Do te jete celes primar sepse eshte identifikues unik.
- Nuk do te pranoje vlera
NULL
sepse duhet te jete gjithnje numer, i tipitint
- Do te jete
AUTO_INCREMENT
ne menyre qe kur te shtojme njoftim te ri, id-ja te gjenerohet automatikisht
titulli
- Do te mbaje titullin e njoftimit
- Do te jete i tipit
varchar
qe pranon maksimumi 255 karaktere - Mund te pranoje vleren
NULL
pershkrimi
- Do te mbaje permbajtjen e njoftimit
- Do te jete i tipit
text
- Nuk duhet te pranoje vleren
NULL
sepse nuk ka sens nje njoftim pa permbajtje
data
- Do te mbaje daten e krijimit te njoftimit
- Do te jete i tipit
date
- Nuk duhet te pranoje vleren
NULL
sepse cdo njoftim duhet te kete nje date krijimi
id_departament
- Do te jete
FOREIGN KEY
qe referencon fushenid
te tabelesdepartamentet
- Do te jete i tipit
int
pasi referencon nje fushe te ketij tipi - Nuk duhet te pranoje vleren
NULL
sepse njoftimet do te kategorizohen sipas departamenteve, ndaj na sherben qe cdo njoftim te jete i lidhur me nje departament
- Do te jete
Per te ndertuar tabelat e mesiperme, ndertojme deklaratat SQL perkatese dhe i ekzekutojme ato. Per me teper sqarim ju sugjeroj t'i riktheheni seksionit 7.3 "Ndertimi i nje baze te dhenash reale".
Databaza e ndertuar paraqitet ne skemen e meposhtme:
Popullimi
Eshte e nevojshme qe fillimisht bazen e te dhenave ta popullojme me te dhenat baze ne menyre qe pas implementimit te sistemi te kemi mundesi te shohim permbajtjet kryesore te faqes p.sh. listen e departamenteve. Po ashtu eshte e nevojshme krijimi fillestar i nje perdoruesi te tipit administrator
. Nuk eshte i nevojshem krijimi i perdoruesve te tjere pasi me ane te nje perdoruesi te tipit administrator
mund te krijojme perdorues te tjere, pasi te kemi implementuar sistemin.
Tabelat qe do te popullojme jane:
departamentet
- Do te shtojme tre departamentet me te cilat perbehet fakulteti i tekologjise se informacionitperdoruesit
- Do te shtojme nje administrator te sistemitnjoftimet
- Do te shtojme dy njoftime per arsye testimiartikujt
- Do te shtojme dy artikuj per arsye testimi
Popullojme tabelen departamentet
:
INSERT INTO departamentet (emri, pershkrimi)
VALUES ( 'Departamenti i Elektronikës dhe Telekomunikacionit', '...' );
INSERT INTO departamentet (emri, pershkrimi)
VALUES ( 'Departamenti i Inxhinierisë Informatike', '...' );
INSERT INTO departamentet (emri, pershkrimi)
VALUES ( 'Departamenti i Bazave të Informatikës', '...' );
Pas ekzekutimit te deklaratave SQL te mesiperme, ne tabele do te shtohen tre rekorde te reja. Ekzekutojme komanden SELECT
per te pare rekordet e tabeles:
Komanda:
SELECT * FROM departamentet;
id | emri | pershkrimi |
---|---|---|
1 | Departamenti i Elektronikës dhe Telekomunikacionit | ... |
2 | Departamenti i Inxhinierisë Informatike | ... |
3 | Departamenti i Bazave të Informatikës | ... |
Popullojme tabelen perdoruesit
:
INSERT INTO perdoruesit (emri, email, password, tipi, id_departament)
VALUES ( 'Alban Afmeti', 'albanafmeti@gmail.com', MD5("test"), 0, 1 );
Ne deklaraten e mesiperme kemi perdorur nje funksion te brendshem te SQL-se qe eshte MD5(...)
. Ky funksion merr si input nje stringe dhe kthen nje stringe te enkriptuar. Enkriptimi perdoret per te dhenat sekrete. Kur krijojme nje perdorues ne sistem me nje fjalekalim perkates, fjalekalimin nuk mund ta leme te dukshem ne databaze, per kete arsye e enkriptojme duke perdorur MD5
. MD5
eshte nje forme enkriptimi me nje drejtim. Trajtimi i ceshjtes sesi funksionin enkriptimi eshte jashte temes se ketij libri keshtu qe per me shume mund te kerkoni online ose te lexoni libra te posacem.
Pas ekzekutimit te deklaratave SQL te mesiperme, ekzekutojme komanden SELECT
per te pare rekordet e tabeles:
Komanda:
SELECT * FROM perdoruesit;
id | emri | password | tipi | id_departament | |
---|---|---|---|---|---|
1 | Alban Afmeti | albanafmeti@gmail.com | 098f6bcd4621d373cade4e832627b4f6 | 0 | 1 |
Paraqitja e fjalekalimit 098f6bcd4621d373cade4e832627b4f6
eshte outputi qe ka dale nga funksioni MD5(...)
kur i kemi dhene vleren test
.
Popullojme tabelen artikujt
:
INSERT INTO artikujt (titulli, pershkrimi, data, id_departament)
VALUES ( 'Zgjedhja e dekanit te ri te fakultetit', 'Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per...', '2017-02-09', 1 );
INSERT INTO artikujt (titulli, pershkrimi, data, id_departament)
VALUES ( 'Zgjedhja e dekanit te ri te fakultetit', 'Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per...', '2017-02-09', 1 );
Pas ekzekutimit te deklaratave te mesiperme, bejme nje SELECT
ne databaze dhe shohim rekordet e reja:
Komanda:
SELECT * FROM artikujt;
id | titulli | pershkrimi | data | id_departament |
---|---|---|---|---|
1 | Zgjedhja e dekanit te ri te fakultetit | Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per... | 2017-02-09 | 1 |
2 | Zgjedhja e dekanit te ri te fakultetit | Dekani i ri u zgjodh. Tashme kane mbetur dhe pak dite per... | 2017-02-09 | 1 |
Popullojme tabelen njoftimet
:
INSERT INTO njoftimet (titulli, pershkrimi, data, id_departament)
VALUES ( 'Njoftim ne lidhje me zhvillimin e mesimit ne...', 'Njoftim ne lidhje me zhvillimin e mesimit ne...', '2017-02-09', 1 );
INSERT INTO njoftimet (titulli, pershkrimi, data, id_departament)
VALUES ( 'Njoftim ne lidhje me zhvillimin e mesimit ne...', 'Njoftim ne lidhje me zhvillimin e mesimit ne...', '2017-02-09', 1 );
Pas ekzekutimit te deklaratave te mesiperme, bejme nje SELECT
ne databaze dhe shohim rekordet e reja:
Komanda:
SELECT * FROM njoftimet;
id | titulli | pershkrimi | data | id_departament |
---|---|---|---|---|
1 | Njoftim ne lidhje me zhvillimin e mesimit ne... | Njoftim ne lidhje me zhvillimin e mesimit ne... | 2017-02-09 | 1 |
2 | Njoftim ne lidhje me zhvillimin e mesimit ne... | Njoftim ne lidhje me zhvillimin e mesimit ne... | 2017-02-09 | 1 |
Pas popullimit te databazes me te dhenat e nevojshme per te kryer testime gjate implementimit te sistemit, ajo eshte gati per perdorim.